/**
 * 堆：
 *      小根堆即优先级队列的另一种实现,
 *      之前实现的方式是有序数组，这种方式插入需要较长时间。
 * 
 *      而这里的堆即树，插入删除都为O(logN)，而落地结构可以用数组实现
 * 堆是完全二叉树，
 *      左子节点: 2*index+1，
 *      右子节点: 2*index-1，
 *      父节点：(index-1)/2;
 * 
 * 堆与二叉搜索树区别:
 *      二叉搜索树： 左子节点 < 节点 < 右子节点
 *      堆只是限定了某结点的值大于（或小于）其左右孩子结点的值，
 *        但没有限定左右孩子结点之间的大小关系
 * 
 *      二叉搜索树通过中序遍历即可实现有序输出、
 *      相对于二叉搜索树，堆是弱序的
 * 
 *      二叉排序树是为了实现动态查找而设计
 *      堆是为了实现排序而设计，一般堆不遍历，因为子节点没有相互约束的关系无法决定下个节点走向
 *      遍历每个元素时，堆相当于无序结构
 * 
 *      堆： 堆排序、查找最大的 K 个数
 */